//搞清楚可变参数模板
/*
可变数目参数被称为参数包（parameter packet）
两种参数包：模板参数包，表示0-n个模板参数
            函数参数包，表示0-n个函数参数
*/

//Args是模板参数包，rest是函数参数包
template<typename T, typename... Args>
void foo(const T& t, const Args&... rest);

#include <iostream>
#include <string>
//当我们想知道参数包中有多少元素时用 sizeof...运算符
template<typename ... Args> 
void g(Args ... args) {
    std::cout << sizeof...(Args) << std::endl;
    std::cout << sizeof...(args) << std::endl;
}

int main()
{
    int i = 0; double d = 3.14; std::string s = "how";
    g(i, s, 42, d);
    g(s, 42, "hi");
    g(d, s);
    g("hi");
    return 0;
}
